package anonymus.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import anonymus.excepcion.DAOExcepcion;
import anonymus.modelo.Usuario;
import anonymus.util.ConexionBD;

public class usuarioDAO extends BaseDAO{
	public int buscar(Usuario vo) throws DAOExcepcion {
		System.out.println("usuarioDAO: buscar(Usuario vo)");
		String queryUsuario = "SELECT persona_idpersona, rol_codRol FROM usuario WHERE username = ?";
		String queryPersona  = "SELECT nombres, paterno, materno, sexo, celular FROM persona WHERE idpersona = ?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(queryUsuario);
			System.out.println("Cod Usuario a buscar " + vo.getCodUsuario());
			stmt.setString(1, vo.getCodUsuario());
			
			ResultSet rs;
			rs = stmt.executeQuery();
			if (rs != null && rs.next()) 
			{
				System.out.println("USUARIO EXISTE. AHORA BUSCAR EL NUMERO DE DOCUMENTO");
				vo.setCodPersona(rs.getInt("persona_idpersona"));
				vo.setCodRol(rs.getInt("rol_codRol"));
				
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(queryPersona);
				stmt.setInt(1, vo.getCodPersona());
				rs = stmt.executeQuery();
				if (rs != null && rs.next()) 
				{
					vo.setNombre(rs.getString("nombres"));
					vo.setPaterno(rs.getString("paterno"));
					vo.setMaterno(rs.getString("materno"));
					vo.setSexo(rs.getString("sexo"));
					vo.setCelular(rs.getString("celular"));
					System.out.println("USUARIO YA EXISTE");
					System.out.println("Nombres: " + vo.getNombre() + " Apellidos: " + 
							vo.getPaterno() + " " + vo.getMaterno() + " Sexo: " + vo.getSexo() + " Celular: " +
							vo.getCelular());
					return 1;
				}
			}
			System.out.println("NO EXISTE CODIGOUSUARIO " + vo.getCodUsuario());
			return 0;
			
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	public Usuario Login(String usuario, String clave) throws DAOExcepcion {
		System.out.println("usuarioDAO: RetornarAdm(String usuario)");
		Usuario objAdm = new Usuario();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "SELECT username,password FROM usuario where username=? and password=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, usuario);
			stmt.setString(2,clave);

			rs = stmt.executeQuery();
			if (rs.next()) {
				objAdm.setCodUsuario(rs.getString("username"));
				objAdm.setPassword(rs.getString("password"));

			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return objAdm;
	}
	
	
	public void insertar(Usuario vo) throws DAOExcepcion {
		System.out.println("usuaarioDAO: insertar(Usuario vo)");
		//String querypersona  = "INSERT INTO persona( nombres, materno, paterno, sexo, tipoDoc, documento, fecNac, celular, tipo, descTipo) VALUES (?,?,?,?,?,?,?,?,?,?)";
		//String querypersona  = "INSERT INTO persona( nombres, materno, paterno, sexo, tipoDoc, documento, fecNac, celular) VALUES (?,?,?,?,?,?,?,?)";
		String querypersona  = "INSERT INTO persona( nombres,paterno, materno, sexo, tipoDoc, documento, fecNac, celular) VALUES (?,?,?,?,?,?,?,?)";
		String queryUsuario = "INSERT INTO usuario( username, password, persona_idpersona, rol_codRol) VALUES (?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			if (buscar(vo) == 1) {
				System.out.println("USUARIO YA EXISTE");
				throw new DAOExcepcion("USUARIO YA EXISTE");
			}
			
			con = ConexionBD.obtenerConexion();
			
			stmt = con.prepareStatement(querypersona);
			stmt.setString(1, vo.getNombre());
			stmt.setString(2, vo.getPaterno());
			stmt.setString(3, vo.getMaterno());
			stmt.setString(4, vo.getSexo());
			stmt.setString(5, vo.getTipoDoc());
			stmt.setInt(6, vo.getDocumento());
			stmt.setString(7, vo.getFecNac());
			stmt.setString(8, vo.getCelular());

			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("Que penita, no se pudo insertar jaaa");
			}
			//ULTIMO CODIGO AUTOGENERADO CREADO
			System.out.println("OK INSERTADO. Obteniendo codigo Autogenerado de Persona");
			int idp = 0;
            String query = "SELECT LAST_INSERT_ID()";
            stmt = con.prepareStatement(query);
            ResultSet rs = stmt.executeQuery();
            if (rs.next()) {
                    idp = rs.getInt(1);
            }
            vo.setCodPersona(idp);
            System.out.println("OK Autogenerado de Persona: " + idp);
            
            con = ConexionBD.obtenerConexion();
            System.out.println("Desp de conexion");
			stmt = con.prepareStatement(queryUsuario);
			System.out.println("Desp1: " + vo.getCodUsuario());
			stmt.setString(1, vo.getCodUsuario());
			System.out.println("Desp2");
			stmt.setString(2, vo.getPassword());
			System.out.println("Desp3");
			stmt.setInt(3, vo.getCodPersona());
			System.out.println("Desp4");
			stmt.setInt(4, vo.getCodRol());
			System.out.println("Antes de Insertar usuario");
			i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("Que penita, no se pudo insertar jaaa");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
}
